package org.yeruyi.common.util;

import android.content.Context;
import android.content.SharedPreferences;

import java.util.Map;

/**
 * Author：yeruyi
 * Date：2017/5/12
 * Version：v1.0
 * Note：
 * <p>
 * 2017年05月21日 创建
 * 2017年11月17日 因为要重构，先拉出来
 * 2018年02月05日 修改两个静态对象，出现数据错位的情况，
 */

public class SpUtil {

    public enum SP_DATA_TYPE {
        S, I, B, F, L
    }

    public static final String DEFAULT_S = "";
    public static final int DEFAULT_I = 0;
    public static final boolean DEFAULT_B = false;
    public static final float DEFAULT_F = 0;
    public static final long DEFAULT_L = 0;


    private SharedPreferences mSharedPreferences;

    private SharedPreferences.Editor mEdit;

    public SpUtil(Context context, String fileName) {
        mSharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
        mEdit = mSharedPreferences.edit();
    }

    /**
     * 保存数据的方法
     *
     * @param key    键名
     * @param object 值
     */
    public void putData(String key, Object object) {

        if (object instanceof String) {
            mEdit.putString(key, (String) object);
        } else if (object instanceof Integer) {
            mEdit.putInt(key, (Integer) object);
        } else if (object instanceof Boolean) {
            mEdit.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float) {
            mEdit.putFloat(key, (Float) object);
        } else if (object instanceof Long) {
            mEdit.putLong(key, (Long) object);
        } else {
            mEdit.putString(key, object.toString());
        }
        mEdit.apply();
    }

    /**
     * 获取保存数据
     *
     * @param key          键的值
     * @param sp_data_type 类型
     * @return
     */

    public Object getDataByKey(String key, SP_DATA_TYPE sp_data_type) {
        switch (sp_data_type) {
            case B:
                return mSharedPreferences.getBoolean(key, DEFAULT_B);
            case F:
                return mSharedPreferences.getFloat(key, DEFAULT_F);
            case I:
                return mSharedPreferences.getInt(key, DEFAULT_I);
            case L:
                return mSharedPreferences.getLong(key, DEFAULT_L);
            case S:
                return mSharedPreferences.getString(key, DEFAULT_S);
        }
        return null;
    }

    /**
     * 移除某个key值已经对应的值
     *
     * @param key
     */
    public void clearDataByKey(String key) {
        mEdit.remove(key);
        mEdit.apply();
    }

    /**
     * 清除所有的数据
     */
    public void clearAllData() {
        mEdit.clear();
        mEdit.apply();
    }

    /**
     * 查询某个key是否存在
     *
     * @param key
     * @return
     */
    public boolean containsByKey(String key) {
        return mSharedPreferences.contains(key);
    }

    /**
     * 返回所有的键值对
     *
     * @return
     */
    public Map<String, ?> getAllData() {
        return mSharedPreferences.getAll();
    }
}
